package com.cskaoyan.javase.stringbuffer._1basic;

import com.sun.media.jfxmedia.events.NewFrameEvent;

/**
 * String字符串的长度 =  value.length
 * String对象不可变,value数组是不可变的
 *
 * StringBuffer不是不可变对象,value数组是可变的
 * StringBuffer表示的字符串的长度 != value数组的长度
 * StringBuffer里有一个count成员变量,用来记录当前字符的数量,也就是当前所表示字符串的长度
 * 在可变字符串对象中，这个value数组被称之为"字符串缓冲区"，它的长度称之为"字符串缓冲区的容量"。
 *
 * @since 09:50
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 无参构造方法
        // public StringBuffer()  这种方式创建对象,缓冲区的大小是16,value数组的长度是16,但是count是0,没有装任何字符
        StringBuffer sb1 = new StringBuffer();
        // length()方法表示字符串的长度,字符的数量,也就是count的值
        System.out.println(sb1.length());

        // 指定容量的字符串缓冲区对象
        // public StringBuffer(int capacity)
        StringBuffer sb2 = new StringBuffer(20);
        System.out.println(sb2.length());

        // 指定字符串内容的字符串缓冲区对象 这时字符串缓冲区的容量大小是"传入字符串的长度 + 16"
        // public StringBuffer(String str) 该方法将一个字符串"hello"存入字符串缓冲区

        /*
            字符串缓冲区自动扩容的机制:
                每当向字符串缓冲区追加数据时,都会判断缓冲区的容量是否够用
                如果不够用,首先是容量乘以2再加2
                如果这样还不够用,字符串缓冲区的容量大小就直接确定为最小需要的容量大小
         */
        StringBuffer sb3 = new StringBuffer("hello");
        sb3.append("abcasjdklasjdlkasdljaskldjasl2131sadhasjkdhaskdhasjkdhadada");
        System.out.println(sb3.length());

    }
}
